package com.wangtianxiang.sxp.common.http;

import com.alibaba.fastjson.JSONObject;

/**
 * 响应工具
 */
public class ResponseEntity {
	public static <T> FeedBackBody<T> status(BizCode bizCode){
		return new FeedBackBody<T>(bizCode);
	}
	public static <T> FeedBackBody<T> status(BizCode bizCode,T body){
		return new FeedBackBody<T>(bizCode).setResult(body);
	}	
	/**
	 * 成功
	 * @param body
	 * @return 
	 */
	public static <T>  FeedBackBody<T> setForSuccess(T body){
		return new FeedBackBody<T>(BizCode.SUCCESS).setResult(body);
	}
	/**
	 * 成功
	 * @return 
	 */
	public static <T>  FeedBackBody<T> setForSuccess(){
		return setForSuccess(null);
	}
	/**
	 * 系统升级维护中
	 * @param body
	 * @return 
	 */
	public static <T>  FeedBackBody<T> setForMaintance(T body){
		return new FeedBackBody<T>(BizCode.MAINTANCE).setResult(body);
	}
	/**
	 * 系统升级维护中
	 * @return 
	 */
	public static <T>  FeedBackBody<T> setForMaintance(){
		return setForMaintance(null);
	}
	/**
	 * 接口异常
	 * @param body
	 * @return 
	 */
	public static <T>  FeedBackBody<T> setForServiceError(T body){
		return new FeedBackBody<T>(BizCode.SERVICE_ERROR).setResult(body);
	}
	/**
	 *  接口异常
	 * @return 
	 */
	public static <T>  FeedBackBody<T> setForServiceError(){
		return setForServiceError(null);
	}
	/**
	 * 接口鉴权失败
	 * @param body
	 * @return 
	 */
	public static <T>  FeedBackBody<T> setForAuthError(T body){
		return new FeedBackBody<T>(BizCode.AUTH_ERROR).setResult(body);
	}
	/**
	 *  接口鉴权失败
	 * @return 
	 */
	public static <T>  FeedBackBody<T> setForAuthError(){
		return setForAuthError(null);
	}
	/**
	 * 参数校验错误
	 * @param body
	 * @return 
	 */
	public static <T> FeedBackBody<T> setForParamCheckError(T body){
		return new FeedBackBody<T>(BizCode.PARAM_CHECK_ERROR).setResult(body);
	}
	/**
	 * 参数校验错误
	 * @return 
	 */
	public static <T> FeedBackBody<T> setForParamCheckError(){
		return setForParamCheckError(null);
	}	
	/**
	 * 重复请求
	 * @param body
	 * @return 
	 */
	public static <T> FeedBackBody<T> setForDuplicate(T body){
		return new FeedBackBody<T>(BizCode.DUPLICATE).setResult(body);
	}
	/**
	 * 重复请求
	 * @return 
	 */
	public static <T> FeedBackBody<T> setForDuplicate(){
		return setForDuplicate(null);
	}	
	/**
	 * 请求次数过多
	 * @param body
	 * @return 
	 */
	public static <T> FeedBackBody<T> setForRequestTooMany(T body){
		return new FeedBackBody<T>(BizCode.TOO_MANY_REQUESTS).setResult(body);
	}
	/**
	 * 请求次数过多
	 * @param body
	 * @return 
	 */
	public static <T> FeedBackBody<T> setForRequestTooMany(){
		return setForRequestTooMany(null);
	}	
	
	/**
	 * 下游应用异常
	 * @param body
	 * @return 
	 */
	public static <T> FeedBackBody<T> setForDownstreamError(T body){
		return new FeedBackBody<T>(BizCode.DOWNSTREAM_ERROR).setResult(body);
	}
	/**
	 * 下游应用异常
	 * @return 
	 */
	public static <T> FeedBackBody<T> setForDownstreamError(){
		return setForDownstreamError(null);
	}
	
	
	/**
	 * 尚未登陆
	 * @param body
	 * @return 
	 */
	public static <T> FeedBackBody<T> setForNotLogin(T body){
		return new FeedBackBody<T>(BizCode.NOT_LOGIN).setResult(body);
	}
	/**
	 * 尚未登陆
	 * @return 
	 */
	public static <T> FeedBackBody<T> setForNotLogin(){
		return setForNotLogin(null);
	}
	
	/**
	 * 用户权限校验不通过
	 * @param body
	 * @return 
	 */
	public static <T> FeedBackBody<T> setForPermissionError(T body){
		return new FeedBackBody<T>(BizCode.PERMISSION_ERROR).setResult(body);
	}
	/**
	 * 用户权限校验不通过
	 * @return 
	 */
	public static <T> FeedBackBody<T> setForPermissionError(){
		return setForPermissionError(null);
	}

	/**
	 * 数据访问失败
	 * @param body
	 * @return 
	 */
	public static <T> FeedBackBody<T> setForDataError(T body){
		return new FeedBackBody<T>(BizCode.DATA_ERROR).setResult(body);
	}
	/**
	 * 数据访问失败
	 * @return 
	 */
	public static <T> FeedBackBody<T> setForDataError(){
		return setForDataError(null);
	}
	/**
	 * 用户不存在
	 * @param body
	 * @return 
	 */
	public static <T> FeedBackBody<T> setForUserNotExist(T body){
		return new FeedBackBody<T>(BizCode.USER_NOT_EXIST).setResult(body);
	}
	/**
	 * 用户不存在
	 * @return 
	 */
	public static <T> FeedBackBody<T> setForUserNotExist(){
		return setForUserNotExist(null);
	}	
	
	/**
	 * 登录失效
	 * @param body
	 * @return 
	 */
	public static <T> FeedBackBody<T> setForLoginUnavailable(T body){
		return new FeedBackBody<T>(BizCode.LOGIN_UNAVAILABLE).setResult(body);
	}
	/**
	 * 登录失效
	 * @return 
	 */
	public static <T> FeedBackBody<T> setForLoginUnavailable(){
		return setForLoginUnavailable(null);
	}

	/**
	 * 账户已锁定
	 * @param body
	 * @return 
	 */
	public static <T> FeedBackBody<T> setForAccountLocked(T body){
		return new FeedBackBody<T>(BizCode.ACCOUNT_LOCKED).setResult(body);
	}
	/**
	 * 账户已锁定
	 * @return 
	 */
	public static <T> FeedBackBody<T> setForAccountLocked(){
		return setForLoginUnavailable(null);
	}		
	

	public static String toJSONString(FeedBackBody<?> feedBackBody){
		return JSONObject.toJSONString(feedBackBody);
	}
}
